package andy.ham;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.ContentUris;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import andy.ham.Fields.DiaryColumns;

//继承来自listView
public class LifeDiary extends ListActivity {
	// 插入一条新纪录
	public static final int MENU_ITEM_INSERT = Menu.FIRST;
	// 编辑内容
	public static final int MENU_ITEM_EDIT = Menu.FIRST + 1;
	public static final int MENU_ITEM_SHARE = Menu.FIRST + 2;
	public static final int MENU_ITEM_EXIT = Menu.FIRST + 3;
	private static final String[] PROJECTION =
		new String[] { DiaryColumns._ID,
			DiaryColumns.TITLE, DiaryColumns.CREATED };

		public void onCreate(Bundle savedInstanceState) {//android的初始化
        super.onCreate(savedInstanceState);
        setContentView(R.layout.diary_list);


         //1------------------《点击textview显示彩蛋图片》
		TextView tv = (TextView) findViewById(R.id.tv);//寻找操作对象
			tv .setOnClickListener(new View.OnClickListener() {//设置监听对象
				public void onClick(View v) {    //显示彩蛋图片
					//Toast.makeText(LifeDiary.this, "6666666666", Toast.LENGTH_LONG).show();
					Toast toast=Toast.makeText(getApplicationContext(), "", Toast.LENGTH_SHORT);
					//toast.setGravity(Gravity.CENTER, 0, 0);
					//创建图片视图对象
					ImageView imageView= new ImageView(getApplicationContext());
					//设置图片
					imageView.setImageResource(R.drawable.caidan);
					//获得toast的布局
					LinearLayout toastView = (LinearLayout) toast.getView();
					//设置此布局为横向的
					toastView.setOrientation(LinearLayout.HORIZONTAL);
					//将ImageView在加入到此布局中的第一个位置
					toastView.addView(imageView, 0);
					toast.show();
				}
			});
		//2------------------《点击textview显示彩蛋图片》

		Intent intent = getIntent();//是将检索出来的intent赋值给一个Intent类型的变量intent
		if (intent.getData() == null) {
			intent.setData(DiaryColumns.CONTENT_URI);
		}
		//Cursor光标 是什么意思?我们在输入信息的时候能看到的那个一闪一闪的短线，那不就是光标吗，所以呢，我们也可以把游标理解成这个一闪一闪的短线。
		Cursor cursor = managedQuery(getIntent().getData(),
				PROJECTION, null,null, DiaryColumns.DEFAULT_SORT_ORDER);
		/*SimpleCursorAdapter允许你绑定一个游标的列到ListView上
		并使用自定义的layout显示每个项目。
		SimpleCursorAdapter的创建，需要传入
		当前的上下文、一个layout资源，一个游标和两个数组
		两个数组：1使用的列的名字，2（相同大小）数组包含View中的资源ID
		用于显示相应列的数据值。*/

		/*自己的笔记：
		 * SimpleCursorAdapter构造函数的参数列表及含义：
		  跟数据库交互式andorid程序最常用的功能，数据库和视图的同步，CursorAdapter是与数据库交互Adapter
		 的最常用的类。同时它的子类SimpleCursorAdapter也是我们常用的操作类库。
		 context: 上下文
		 data: 数据源， 类型为Map组成的List集合，每一个Map对应ListView中的一个Item，Map中的所有String类型的
		       key组成的一个字符串数组就是参数from，key的作用就是与item关联起来。
		 resource: item的布局文件，其中至少要有参数to数组中的所有视图
		 from: 将被添加到与每个Item相关联的映射的列名称列表，data参数中Map的String类型键名组成的字符串数组
		 to: 显示与from数组对应数据的视图ID，这些视图都存在于resource指定的Item布局文件中

		 */
		SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
				R.layout.diary_row, cursor, new String[]
				{ DiaryColumns.TITLE,DiaryColumns.CREATED },
				new int[] { R.id.text1,R.id.created });
		setListAdapter(adapter);
    }



    //添加选择菜单
    public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		menu.add(Menu.NONE, MENU_ITEM_INSERT, 0, R.string.menu_insert);
		//menu.add(Menu.NONE, MENU_ITEM_SHARE, 0, R.string.menu_share);
		menu.add(Menu.NONE, MENU_ITEM_EXIT, 0, R.string.menu_exit);
		return true;
	}
    //1----------------《菜单栏》
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		// 插入一条数据
		case MENU_ITEM_INSERT:
			Intent intent0 = new Intent(this, DiaryEditor.class);
			intent0.setAction(DiaryEditor.INSERT_DIARY_ACTION);
			intent0.setData(getIntent().getData());
			startActivity(intent0);
			return true;
			// 编辑当前数据内容通过单击日记名实现
			// 分享当前数据
//		case MENU_ITEM_SHARE:
//			Intent intent=new Intent(Intent.ACTION_SEND);
//			intent.putExtra(Intent.EXTRA_TEXT,item.getItemId());
//			intent.setType("text/plain");
//			startActivity(Intent.createChooser(intent,"分享到..."));
//			break;
		case MENU_ITEM_EXIT:
			finish();
			//System.exit(0);
			/*
			finish是Activity的类，仅仅针对Activity，当调用finish()时，只是将活动推向后台，并没有立
			 即释放内存，活动的资源并没有被清理；当调用System.exit(0)时，杀死了整个进程，
			这时候活动所占的资源也会被释放。
			 */
				break;
		}
		return super.onOptionsItemSelected(item);
	}
	//2----------------《菜单栏》

	//1---------《重写了finish（），改为提示是否退出》
	@Override
	public void finish() {
		AlertDialog.Builder dialog = new AlertDialog.Builder(LifeDiary.this);
		dialog.setTitle("温馨提示");
		dialog.setMessage("是否退出本程序？");
		dialog.setCancelable(false);
		dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialogInterface, int i) {
				System.exit(0);
			}
		});
		dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialogInterface, int i) {
				//Toast.makeText(LifeDiary.this, "ヾﾉ≧∀≦)o", Toast.LENGTH_SHORT).show();
			}
		});
		dialog.show();
	}
	//2-----------《重写了finish（），改为提示是否退出》

	//1-------------------《再次返回键退出程序》
	/*
	 * 笔记：
	 Activity.onKeyDown();
	 当某个键被按下时会触发，但不会被任何的该Activity内的任何view处理。
	 默认按下KEYCODE_BACK键后会回到上一个Activity。

	 Activity.onKeyUp():
	 当某个按键被按下，松开后触发，但不会被任何的该Activity内的任何view处理。
	 默认没有执行任何操作，只是简单的给一个false作为返回值。

	 finish是Activity的类，仅仅针对Activity，当调用finish()时，只是将活动推向后台，并没有立即释放内存，
	 活动的资源并没有被清理；当调用System.exit(0)时，杀死了整个进程，这时候活动所占的资源也会被释放。
	 */
	private Handler handler = new Handler();
	private long time=0;
	@Override   //@Override是伪代码，是可写可不写的．它表示方法重写，写上会给我们带来好处．
	public void onBackPressed() {//双击返回键退出APP
		//time = System.currentTimeMillis();//获取当前时间，以毫秒为单位
		if ( System.currentTimeMillis() - time > 2000) {
			//Toast.LENGTH_SHORT大概显示时间为1秒，Toast.LENGTH_LONG大概显示时间为3秒
			Toast.makeText(LifeDiary.this, "再按一次返回退出程序", Toast.LENGTH_SHORT).show();
			time = System.currentTimeMillis();
			return;
		}
	   else{
	  		//finish();
			System.exit(0);
		}
		//super()表示调用父类的构造函数，super.onBackPressed()表示调用父类的函数（非构造函数）
		super.onBackPressed();
	}
	//2--------------------《再次返回键退出程序》

	protected void onListItemClick   //点击编辑日记
	(ListView l, View v, int position, long id) {
		Uri uri = ContentUris.withAppendedId(getIntent().getData(), id);
		startActivity(new Intent(DiaryEditor.EDIT_DIARY_ACTION, uri));
	}

	protected void onActivityResult(int requestCode, int resultCode,
			Intent intent) {
		super.onActivityResult(requestCode, resultCode, intent);
		//renderListView();
	}
	private void renderListView() {
		Cursor cursor = managedQuery(getIntent().getData(), PROJECTION,
				null,null, DiaryColumns.DEFAULT_SORT_ORDER);

		SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
			R.layout.diary_row, cursor, new String[] { DiaryColumns.TITLE,
			DiaryColumns.CREATED }, new int[] { R.id.text1,R.id.created });
		setListAdapter(adapter);
	}

/*
 * 第一个参数：当前上下午的环境。可用getApplicationContext()或this
 * 第二个参数：要显示的字符串
 * 第三个参数：显示时间的长短。Toast有默认的两个LENGTH_SHORT（短）和LENGTH_LONG（长），也可以使用毫秒2000ms
 */
	@Override
	public boolean onContextItemSelected(MenuItem item) {//点击菜单事件
		// TODO Auto-generated method stub
		super.onContextItemSelected(item);
		switch (item.getItemId()) {
			case 1://做事情
				break;
			case 2:// Toast.makeText为静态方法
				//Toast.makeText(LifeDiary.this, "6666666666", Toast.LENGTH_LONG).show();
				Toast toast=Toast.makeText(getApplicationContext(), "显示图片", Toast.LENGTH_LONG);
				//toast.setGravity(Gravity.CENTER, 0, 0);
				//创建图片视图对象
				ImageView imageView= new ImageView(getApplicationContext());
				//设置图片
				imageView.setImageResource(R.drawable.caidan);
				//获得toast的布局
				LinearLayout toastView = (LinearLayout) toast.getView();
				//设置此布局为横向的
				toastView.setOrientation(LinearLayout.HORIZONTAL);
				//将ImageView在加入到此布局中的第一个位置
				toastView.addView(imageView, 0);
				toast.show();
				break;
		}
		return super.onContextItemSelected(item);
	}

}





